# 必要参数
def func1(str):
	"""
	必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
	调用 func1() 函数，你必须传入一个参数，不然会出现语法错误：
	"""
	print('必要参数：', str)


func1('wangyue')


# 关键字参数,
def func2(name, age):
	"""
	关键字参数和函数调用关系紧密，函数调用使用关键字参数来确定传入的参数值。
	使用关键字参数允许函数调用时参数的顺序与声明时不一致，因为 Python 解释器能够用参数名匹配参数值。
	"""
	print(f'关键字参数：name: {name},age: {age}')
	# print('关键字参数：name: %s,age: %s' % (name, age))
	pass


func2(age=24, name='wangyue')  # 使用不需要使用指定顺序


# 默认参数
def func3(name, age=18):
	"""
	调用函数时，如果没有传递参数，则会使用默认参数。以下实例中如果没有传入 age 参数，则使用默认值：
	"""
	print('默认参数：name: %s,age: %s' % (name, age))
	pass


func3(name='joey')


# 不定长参数
def func4(name, *hobbies):
	"""
	可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数
	加了星号 * 的参数会以元组(tuple)的形式导入，存放所有未命名的变量参数。
	name:zhangsan,hobbies:('吃饭', '睡觉', '写代码')
	"""
	print(f'不定长参数：name:{name},hobbies:{hobbies}')
	pass


func4('zhangsan', '吃饭', '睡觉', '写代码')


# 不定长参数2
def func5(name, **info):
	"""
	加了两个星号 ** 的参数会以字典的形式导入。
	name:lisi,info:{'age': 24, 'sex': '男'}
	"""
	print(f'不定长参数：name:{name},info:{info}')
	pass


func5('lisi', age=24, sex='男')


# 声明函数时，参数中星号 * 可以单独出现，例如:
def func6(a, b, *, c):
	"""
	如果单独出现星号 * 后的参数必须用关键字传入。
	"""
	print('单独*出现：', a + b + c)
	pass


func6(1, 2, c=3)
